package intopo.game.strategy;

/**
 * A class that represents the common attributes of all strategy
 * parameters. These are used to produce statistical information.
 *
 * @param <T> The strategy parameter type.
 */
public interface StrategyParameter<T extends Object>
{
	/**
	 * Returns the name of this strategy parameter.
	 */
	public String getName ();

	/**
	 * Get the value of this strategy parameter as an object.
	 */
	public T getValue ();

	/**
	 * Set the value of this strategy parameter to the new value if
	 * applicable. If strategy parameters are constant, this method throws
	 * an {@code UnsupportedOperationException}.

	 * @param newValue The new value of this parameter.

	 * @throws UnsupportedOperationException If this operation is not
	 * supported by strategy parameters.

	 * @throws IllegalArgumentException If the new value is not a valid
	 * representation of this parameter parameter.
	 */
	public void setValue (T newValue)
		throws UnsupportedOperationException, IllegalArgumentException;
}
